{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<torch._C.Generator at 0x7fd84b9edad0>"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import torch\n",
    "from torch.autograd import Variable\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "torch.manual_seed(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "x = torch.unsqueeze(torch.linspace(-1,1,100),dim=1)\n",
    "y = x.pow(2) + 0.2 * torch.rand(x.size())\n",
    "x,y = Variable(x, requires_grad=False),Variable(y, requires_grad=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "def save():\n",
    "    net1 = torch.nn.Sequential(\n",
    "        torch.nn.Linear(1,10),\n",
    "        torch.nn.ReLU(),\n",
    "        torch.nn.Linear(10,1)    \n",
    "    )\n",
    "    \n",
    "    optimizer = torch.optim.SGD(net1.parameters(), lr=0.2)\n",
    "    loss_func = torch.nn.MSELoss()\n",
    "    \n",
    "    for t in range(100):\n",
    "        prediction = net1(x)\n",
    "        loss = loss_func(prediction, y)\n",
    "        \n",
    "        optimizer.zero_grad()\n",
    "        loss.backward()\n",
    "        optimizer.step()\n",
    "        \n",
    "    # plot result\n",
    "    plt.figure(1, figsize=(10, 3))\n",
    "    plt.subplot(131)\n",
    "    plt.title('Net1')\n",
    "    plt.scatter(x.data.numpy(), y.data.numpy())\n",
    "    plt.plot(x.data.numpy(), prediction.data.numpy(), 'r-', lw=5)\n",
    "\n",
    "    torch.save(net1,'net.pkl')\n",
    "    torch.save(net1.state_dict(),'net_params.pkl')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "def restore_net():\n",
    "    net2 = torch.load('net.pkl')\n",
    "    prediction = net2(x)\n",
    "    \n",
    "    plt.subplot(132)\n",
    "    plt.title('Net2')\n",
    "    plt.scatter(x.data.numpy(), y.data.numpy())\n",
    "    plt.plot(x.data.numpy(), prediction.data.numpy(), 'r-', lw=5)\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "def restore_params():\n",
    "    net3 = torch.nn.Sequential(\n",
    "        torch.nn.Linear(1,10),\n",
    "        torch.nn.ReLU(),\n",
    "        torch.nn.Linear(10,1)  \n",
    "    )\n",
    "    \n",
    "    net3.load_state_dict(torch.load('net_params.pkl'))\n",
    "    prediction = net3(x)\n",
    "    \n",
    "    plt.subplot(133)\n",
    "    plt.title('Net3')\n",
    "    plt.scatter(x.data.numpy(), y.data.numpy())\n",
    "    plt.plot(x.data.numpy(), prediction.data.numpy(), 'r-', lw=5)\n",
    "    plt.show()    \n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x216 with 3 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "save()\n",
    "restore_net()\n",
    "restore_params()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "pytorch",
   "language": "python",
   "name": "pytorch"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
